12 - 2.2.4 C-Kurzeinführung: Gültigkeitsbereiche von Variablen [ID:14153]
50 von 219 angezeigt

In diesem Abschnitt geht es jetzt darum, wo in einem aus mehreren Modulen bestehenden

Programm bestimmte Namen sichtbar sind, gültig sind und auf die Weise eben

Variablen oder Funktionen zugriffbar sind, aufrufbar sind. Dafür gibt es

Gültigkeitsregeln und diese Gültigkeitsregeln legen eben fest,

welche Namen von Variablen und Funktionen, wo im Programm bekannt sind.

Und insgesamt gibt es an der Stelle mehrere Stufen.

Es gibt Namen, die sind im gesamten Programm über alle Modul- und

Funktionsgrenzen hinweg bekannt. Es gibt Namen, die sind global in einem Modul

bekannt, aber auch über Funktionsgrenzen hinweg.

Diese ersten zwei Stufen sind dann die sogenannten globalen Variablen oder

globalen Funktionen. Dann gibt es Variablen, die sind nur lokal innerhalb

einer Funktion bekannt und noch weniger Variablen und Variablen letztendlich,

die sind nur lokal innerhalb eines Blocks bekannt.

Jetzt kann es immer sein, dass in einem engeren Bereich, also in einem weniger

weit umfassenden Bereich, Namen existieren, die es bereits außerhalb auch

schon gab. Und dann ist die grundlegende Regel so, dass bei Namensgleichheit und

Überdeckung von Namen eine lokale Variable innerhalb einer Funktion, die

gleichnamige globale Variable, überdeckt und eine lokale Variable innerhalb eines

Blocks auch immer die gleichnamige globale Variable oder auch gleichnamige

lokale Variable in umgehenden Blöcken überdeckt. Also immer der engere

Sichtbarkeitsbereich überdeckt den äußeren weiteren Sichtbarkeitsbereich.

Schauen wir uns erstmal globale Variablen an. Das sind also Variablen, die im

gesamten Programm gültig sind, über alle Module hinweg. Sie werden außerhalb von

Funktionen definiert und sie sind ab der Zeile, in der sie definiert sind, in der

gesamten Datei zugreifbar. Und globale Variablen, die in anderen Modulen

definiert wurden, müssen vor dem ersten Zugriff bekannt gemacht werden, das

heißt sie müssen deklariert werden. Es muss kein Speicherplatz angelegt werden.

Wenn Sie sich vielleicht noch mal erinnern an die Begriffe Definition und

Deklaration. Bei einer Definition wird eine Variable bekannt gemacht und es wird

Speicherplatz dafür angelegt. Bei einer Deklaration wird nur der Name und der

Typ dem Compiler bekannt gemacht, aber der Speicherplatz kommt von woanders.

Und das wäre in diesem Fall ja so, dass in einem anderen Modul die Definition der

Variablen erfolgt und der Speicherplatz reserviert wird. Und in einem zweiten

Modul wollen Sie dann bloß noch darauf zugreifen, das heißt Sie müssen also im

Compiler nur sagen, da gibt es zum Beispiel, wie hier in dem aufgeführten

Beispiel, zwei Integer-Variablen A und B und eine Character-Variable C. Die kommt

von irgendwo her und die Typen sind eben Integer und Character. Und beim

Zusammenbinden der Module muss dann letztendlich die Referenz auf die

entsprechende Speicherstelle hergestellt werden. Also es gibt ein

anderes Modul, das sagt, okay ich habe eine Variable A und ich habe ein Speicher

dafür und in dem Modul, in dem diese Externdeklaration gemacht wird, wird nur

der Name bekannt gegeben und eben beim Zusammenbinden muss dann dieser

Bezug zur richtigen Speicherstelle dann hergestellt werden. Solche globalen

Variablen sind einerseits natürlich sehr praktisch, weil man also direkt auf

irgendwelche Zustände zugreifen kann, aber wenn Sie sich an das Bild mit dieser

blauen Wolke oben drüber im letzten Abschnitt erinnern, dann ist genau das

das Problem, dass Sie also letztendlich modulübergreifend irgendwelche mehr oder

weniger wilden Zugriffe auf solche Variablen haben. Das Schlimme daran ist,

dass der Zusammenhang zwischen den Daten und den darauf operierenden

Programmcode letztendlich verloren geht. Sie haben tausende Zeilen von Programmcode

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:17:26 Min

Aufnahmedatum

2020-04-25

Hochgeladen am

2020-04-25 13:36:11

Sprache

de-DE

Tags

Variablen Gültigkeit
Einbetten
Wordpress FAU Plugin
iFrame
Teilen